package com.xinyuan.digit.next.subscriber.db.pojo;

import com.xinyuan.digit.next.subscriber.db.util.LambdaUtils;

import java.io.Serializable;
import java.util.function.Function;

/**
 * 序列化函数接口
 *
 * @author liuchenghui 2025/10/23
 * @version 1.0
 */
@FunctionalInterface
public interface SFunction<T, R> extends Function<T, R>, Serializable {
    /**
     * 默认方法：获取字段名
     * 需要配合EntityUtils工具类使用
     */
    default String getFieldName() {
        return LambdaUtils.column(this);
    }

    /**
     * 默认方法：获取实体类类型
     */
    default Class<T> getEntityClass() {
        return LambdaUtils.getEntityClass(this);
    }

    /**
     * 静态方法：创建SFunction（用于方法引用）
     */
    static <T, R> SFunction<T, R> of(SFunction<T, R> function) {
        return function;
    }
}
